package controladores;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import juego.Juego;
import juego.usuariosGuardados.UsuariosGuardados;
import persistores.persistoresDeJugador.UsuariosGuardadosPersistor;
import vistas.InterfazSeleccionUsuario;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import juego.Jugador;
import juego.usuariosGuardados.Usuario;
import vistas.InterfazCreacionUsuario;
import vistas.InterfazMenu;
import vistas.VentanaCreacionUsuario;
import vistas.VentanaMenu;


public class ControladorSeleccionUsuario extends Controlador implements ActionListener {
    private InterfazSeleccionUsuario vista;
    private Juego modelo;
    
    public ControladorSeleccionUsuario (InterfazSeleccionUsuario vista, Juego modelo) {
        this.vista = vista;
        this.modelo = modelo;
        
        //Se verifica la existencia de usuarios guardados.
        File archivoUsuarios = new File(".\\UsuariosGuardados.xml");
        if(!archivoUsuarios.exists()){
            InterfazCreacionUsuario vistaCreacion = new VentanaCreacionUsuario();
            ControladorCreacionUsuario controlador = new ControladorCreacionUsuario (vistaCreacion, this.modelo);
            vistaCreacion.setControlador(controlador);
            vistaCreacion.arrancar();
            vista.cerrar();
        } else cargarUsuarios();
    }
    
    private void cargarUsuarios() {
        UsuariosGuardadosPersistor persistor = new UsuariosGuardadosPersistor();
        UsuariosGuardados listaDeUsuarios = persistor.deserializar(".\\UsuariosGuardados");
        List<String> nombres = new ArrayList<>();
        for(int i = 0; i < listaDeUsuarios.getUsuarios().size(); i++){
            Usuario usuario = listaDeUsuarios.getUsuarios().get(i);
            String nombre = usuario.getNickname();
            nombres.add(nombre);
        }
        vista.agregarBotones(nombres);
    }
    
    public void actionPerformed (ActionEvent evento) {
        
        if (evento.getActionCommand().equals("Aceptar")) {
            String nombreUsuario = vista.getUsuarioElegido();
            if (nombreUsuario.equals("ERROR")) vista.mostrarMensajeDeError();
            else {
                Jugador jugador = new Jugador(nombreUsuario);
                modelo.setJugador(jugador);

                InterfazMenu vistaMenu = new VentanaMenu();
                ControladorMenu controladorMenu = new ControladorMenu (vistaMenu, modelo);
                vistaMenu.setControlador (controladorMenu);
                vistaMenu.arrancar();
                vista.cerrar();
            }
        }
    }
}